package JavaSE.CODE.javaThread;

public class LambdaIntro {

    static class UseOnlyOnce1 implements  OneMethod{
        @Override
        public void oneMethod() {
            System.out.println("2、我是静态内部类，只能被用到一次");
        }
    }

    public static void main(String[] args) {
        OneMethod useOnlyOnce;
        //接口变量指向接口的实现类的实例
        //外部类
        useOnlyOnce = new UseOnlyOnce();
        useOnlyOnce.oneMethod();
        //静态内部类
        useOnlyOnce = new UseOnlyOnce1();
        useOnlyOnce.oneMethod();

        class UseOnlyOnce2 implements  OneMethod{
            @Override
            public void oneMethod() {
                System.out.println("3、我是局部内部类，只能被用到一次");
            }
        }
        //局部内部类
        useOnlyOnce = new UseOnlyOnce2();
        useOnlyOnce.oneMethod();

        //匿名内部类，必须借助接口或者父类（要不然你都不知道写啥方法）
        //一般匿名内部类就是用来实现接口或者重写父类的方法的
        //匿名内部类的结果就是一个实例，可以直接拿着用
        useOnlyOnce = new OneMethod() {
            @Override
            public void oneMethod() {
                System.out.println("4、我是匿名内部类，只能被用到一次");
            }
        };
        useOnlyOnce.oneMethod();

        //函数式编程：lambda表达式
        useOnlyOnce = ()->{
            System.out.println("4、我是匿名内部类，只能被用到一次");
        };
        //点的这个方法，就是接口里面的方法，接口里只有一个方法名，实现类也只有一个方法，所以不需要保留类和方法名了
        useOnlyOnce.oneMethod();

    }
}

interface OneMethod{
    void oneMethod();
}

class UseOnlyOnce implements  OneMethod{
    @Override
    public void oneMethod() {
        System.out.println("1、我是外部类，我只能被用到一次");
    }
}